import 'dart:async';

/**
 *  Dart 的箭头语法 => 可以进一步简化匿名函数的定义，使代码更加简洁。和Java类似
 */
void main(){

  // 匿名函数
  var multiply = (int a, int b){  // 也可以写 Function multiply
    return a * b;
  };
  // 直接调用匿名函数
  print(multiply(4,7));
  // 可以吧匿名函数当做参数传递下去
  executeFunction(multiply);

  // 还可以这样，定义后立马调用，得道计算结果
  var ccav = (int a, int b){
    return a * b;
  }(9,5);
  print(ccav);


  // 匿名函数简洁的写法
  executeSimpleFunction(6,7, (int a ,int b ) => a+b);
  executeSimpleFunction(6,7, (int a ,int b ) => a-b);

  // 在Future中使用
  Future.delayed(Duration(seconds: 5), (){  // 延迟5秒后输出
    print('Hello, World!');
  });


  // 函数也可以返回匿名函数
  var multiplyByTwo = getMultiplier(6);
  print(multiplyByTwo(5));

  // 自执行
  (multiply)(1,2);
    // 还可以这样写
  (
      (){
        print('Hello, World!');
      }
  )();

}


/**
 * 可以把匿名函数当做参数传递
 */
void  executeFunction(int Function(int, int) func){
    print(func(3,5));
}

/**
 * 当然也支持简洁的写法
 */
void executeSimpleFunction(int a, int b, Function(int, int )func){
  print(func(a,b));
}




/**
 * 还可以返回一个匿名函数
 */
Function getMultiplier(int factor){
  return (int number) => number * factor;
}


